package exo1;

import java.awt.Graphics;

public class CkSol extends Ck
{
    private static final long serialVersionUID = 1L;

    public CkSol (int prof)
    {
        super(prof);
    }

    /**
     * Fonction drawCk : Dessine Ck de manière récursive
     * @param x1 Abscisse du point de la 1e extrémité
     * @param y1 Ordonnée du point de la 1e extrémité
     * @param x2 Abscisse du point de la 2e extrémité
     * @param y2 Ordonnée du point de la 2e extrémité
     * @param k  Profondeur de récurrence
     * @param g  Zone graphique
     */
    @Override
    public void drawCk (int x1, int y1, int x2, int y2, int k,
                        Graphics g)
    {
        // New point
        int x3 = 0, y3 = 0;

        // Break condition
        if (k == 1)
            g.drawLine(x1, y1, x2, y2);
        else
        {
            // Case : vertical segment
            if (x1 == x2)
            {
                x3 = x1 + (y2 - y1) / 2;
                y3 = (y1 + y2) / 2;
            }
            // Case : horizontal segment
            else if (y1 == y2)
            {
                x3 = (x1 + x2) / 2;
                y3 = y1 + (x1 - x2) / 2;
            }
            // Case : ascendent segment
            else if ( x1 < x2 && y1 > y2 ||
                      x1 > x2 && y1 < y2 )
            {
                x3 = x1;
                y3 = y2;
            }
            // Case : decendent segment
            else
            {
                x3 = x2;
                y3 = y1;
            }
            
            // Recursive call to draw the two segments
            drawCk(x1, y1, x3, y3, k-1, g);
            drawCk(x3, y3, x2, y2, k-1, g);
        }
    }
}
